context("harmonise")

set.seed(1)

# disable strings as factors, but re-enable upon exit
old <- options(stringsAsFactors = FALSE)
on.exit(options(old), add = TRUE)


df <- data.frame(
    "SNP" = c("9_69001927_C_T", "9_69459263_A_G", "9_69508544_G_A"),
    "effect_allele" = c("T", "G", "A"),
    "other_allele" = c("C", "A", "G"),
    "se" = c(0.01664, 0.02038, 0.04585),
    "beta" = c(0.367464, -0.265656, 0.254032),
    "eaf" = c(0.319894, 0.39234, 0.343751),
    "pval" = c(0.250677, 0.498338, 0.459907),
    "n" = c(30100, 30100, 30100),
    "pheno_id" = c("traita", "traita", "traita")
)

df_exp <- format_data(
    df,
    type = "exposure",
    snp_col = "SNP",
    pval_col = "pval",
    beta_col = "beta",
    se_col = "se",
    effect_allele_col = "effect_allele",
    other_allele_col = "other_allele",
    eaf_col = "eaf",
    phenotype_col = "pheno_id",
    samplesize_col = "n"
)

df_out <- format_data(
    df,
    type = "outcome",
    snp_col = "SNP",
    pval_col = "pval",
    beta_col = "beta",
    se_col = "se",
    effect_allele_col = "effect_allele",
    other_allele_col = "other_allele",
    eaf_col = "eaf",
    phenotype_col = "pheno_id",
    samplesize_col = "n"
)


test_that("harmonise_data works when exposure and outcome df are 1 row.", {
    for (i in seq(1,3)) {
        result <- harmonise_data(
            exposure_dat = df_exp[1,],
            outcome_dat = df_out[1,],
            action = 1
        )
        expect_equal(nrow(result), 1)
    }
})


test_that("harmonise_data works when there are no matching SNPs.", {
    for (i in seq(1,3)) {
        df_out$SNP <- paste(df_out$SNP, "foo", sep = "_")
        result <- harmonise_data(
            exposure_dat = df_exp,
            outcome_dat = df_out,
            action = 1
        )
        expect_equal(nrow(result), 0)
    }
})
